package com.c2b.algorithm.leetcode.base;

import java.util.Arrays;

/**
 * <a href="https://leetcode.cn/problems/largest-positive-integer-that-exists-with-its-negative/description/">与对应负数同时存在的最大正整数</a>
 * <p>给你一个 不包含 任何零的整数数组 nums ，找出自身与对应的负数都在数组中存在的最大正整数 k 。
 * 返回正整数 k ，如果不存在这样的整数，返回 -1 。</p>
 * <pre>
 * 示例 1：
 *      输入：nums = [-1,2,-3,3]
 *      输出：3
 *      解释：3 是数组中唯一一个满足题目要求的 k 。
 *
 * 示例 2：
 *      输入：nums = [-1,10,6,7,-7,1]
 *      输出：7
 *      解释：数组中存在 1 和 7 对应的负数，7 的值更大。
 *
 * 示例 3：
 *      输入：nums = [-10,8,6,7,-2,-3]
 *      输出：-1
 *      解释：不存在满足题目要求的 k ，返回 -1 。
 * </pre>
 * <b>提示：</b>
 * <li>1<= nums.length <= 1000</li>
 * <li>-1000 <= nums[i] <= 1000</li>
 *
 * @author c2b
 * @since 2023/4/14 9:35
 */
public class LC2241FindMaxK_S {

    public int findMaxK(int[] nums) {
        // 如果数组中元素恰好为1个，直接返回-1
        if (nums.length == 1) {
            return -1;
        }
        // 对数组进行排序
        Arrays.sort(nums);
        // 双指针
        int leftIndex = 0;
        int rightIndex = nums.length - 1;
        while (nums[leftIndex] < 0 && nums[rightIndex] > 0) {
            if (nums[leftIndex] + nums[rightIndex] > 0) {
                // 正数的绝对值大于负数的绝对值
                --rightIndex;
            } else if (nums[leftIndex] + nums[rightIndex] < 0) {
                // 负数的绝对值大于正数的绝对值
                ++leftIndex;
            } else {
                // 满足条件的结果
                return nums[rightIndex];
            }
        }
        return -1;
    }
}
